<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;

// 使用类
use DB;
use App\Http\Controllers\Controller;
// 后台分类控制器
class TypesController extends Controller
{   
    // 分类首页

    public function index(Request $request)
    {   

        $count = $request -> input('count',10);
        $search = $request -> input('search','');
        $request = $request -> all();
        //$data=self::getTypes();
        $data =\DB::table('types')
                     ->select(\DB::raw('*,concat(path,id) as p'))
                     ->where('typename', 'like', '%'.$search.'%')
                     ->orderBy('p')
                     ->paginate($count);
      
        // 加载页面
       return view("admin.types.index")->with('data',$data)->with('request',$request);

    }

    // 添加分类页面 admin/types/create  get

    public function create($id ='')
    {   
        //加载添加分类页面
        return view('admin.types.create')->with('data',self::getTypes())->with('id',$id);
    }

    // 插入操作  admin/types  post

    public function store(Request $request)
    { 

        //获取表单数据
        $temp = $request -> except('_token');
     //表单验证

         $rules=[
            'typename' => 'required|unique:types',
            'title' => 'required',    
        ];

        // 表单验证的提示信息
        $message=[

            "typename.required"=>"请输入分类名称",
            "typename.unique"=>"分类名已存在",
            "title.required"=>"请输入标题",
        ];

        // 使用laravel的表单验证
        $this->validate($request,$rules,$message);

        //父id
        $pid = $temp['pid'];

        //判断是否是父级分类
        if($pid == 0){
            // 顶级分类
            $temp['path'] = 0;
            $temp['path'] = '0'.',';
        }else{
            // 不是顶级分类
            $parentData =\ DB::table('types')->where('id',$pid)->first();
            $temp['path'] =  $parentData['path'].$parentData['id'].',';
        }   

        //添加创建时间
        $temp['createtime']=time();
        
        //判断分类层级
        $len = substr_count($temp['path'],',');

        if($len<=3){
            //将数据插入到数据库
            $res =\DB::table('types')->insert($temp);
            if($res){
                return redirect('admin/types')->with('success','添加成功');
            }else{
                return back()->with('error','添加失败');
            }
        }else{
            return back()->with('error','最多三级分类');
        }
        
       
    }

    // 修改页面 admin/types/{admin}/edit get

    public function edit($id)
    {

        //拼接path ID 查询
         $data =\DB::table('types')
                     ->select(\DB::raw('*,concat(path,id) as p'))
                     ->where('id',$id)
                     ->first();

            // 统计一个字符串在另一个字符串出现次数
            $len = substr_count($data['path'],',');
          
             // 重复的使用一个字符串
              if($len==1){
                $data['typename'] = $data['typename'];
              }else{
                $data['typename'] = str_repeat('|----',$len-1).$data['typename'];
              }     
           
        //分配数据
       return view('admin.types.edit')->with("data",$data);
    }


    // 更新操作 admin/types/{admin}  put

    public function update(Request $request, $id)
    {     
        //获取需要修改数据
         $data=$request->except('_token','_method','typename');
        
        //数据库操作
         $res=\DB::table('types')->where('id',$id)->update($data);        

         //返回
         if($res){
            return redirect('admin/types')->with('success','修改成功');
         }else{
            return back()->with('error','修改失败');
         }
    }


     // 处理分类
    static public function getTypes()
    {
        
        //拼接path ID 查询
         $data =\DB::table('types')
                     ->select(\DB::raw('*,concat(path,id) as p'))
                     ->orderBy('p')
                     ->get();

                  
        foreach ($data as $key => $value) {
            // 统计一个字符串在另一个字符串出现次数
            $len = substr_count($value['path'],',');
          
             // 通过， 判断是几级分类
              if($len==1){
                $data[$key]['typename'] = $value['typename'];
              }else{
                $data[$key]['typename'] = str_repeat('|----',$len-1).$value['typename'];
              }     
           
        }
        return $data;
    }

}
